++ مخطط الرسم البياني :
#include "LedControl.h" /* pin 2 is connected to the DataIn pin 4 is connected to the CLK pin 3 is connected to LOAD ***** Please set the number of devices you have ***** */ LedControl lc=LedControl(2,4,3,2); const int addrL = 0; // first LED matrix - Left robot eye const int addrR = 1; // second LED matrix - Right robot eye void setup() { /*The MAX72XX is in power-saving mode on startup*/ lc.shutdown(addrL,false); lc.shutdown(addrR,false); /* Set the brightness to max values */ lc.setIntensity(addrL,15); lc.setIntensity(addrR,15); /* and clear the display */ lc.clearDisplay(addrL); lc.clearDisplay(addrR); // turn on all LEDs for a test for(int row=0;row<8;row++) { lc.setRow(addrL, row, 255); lc.setRow(addrR, row, 255); delay(100); } delay(300); } void showNeutral() { byte left[8] = { B00000000, B00111100, B01000010, B01011010, B01011010, B01000010, B00111100, B00000000}; displayEmotion(left, left); } void showAnger() { byte left[8] = { B00000000, B00000000, B01111110, B01011010, B01011010, B00100100, B00011000, B00000000}; byte right[8] = { B00000000, B00000000, B01111110, B01011010, B01011010, B00100100, B00011000, B00000000}; displayEmotion(left, right); } void showSadness() { byte left[8] = { B00000000, B00001100, B00010010, B00111010, B01011010, B01000010, B00111100, B00000000}; byte right[8] = { B00000000, B00110000, B01001000, B01011100, B01011010, B01000010, B00111100, B00000000}; displayEmotion(left, right); } void displayEmotion(byte left[8], byte right[8]) { lc.clearDisplay(addrL); lc.clearDisplay(addrR); for(int row=0;row<8;row++) { lc.setRow(addrL,row,left[row]); lc.setRow(addrR,row,right[row]); } } void loop() { showNeutral(); delay(4000); showAnger(); delay(4000); showSadness(); delay(4000); }
++ الكود البرمجي هنا : MAX7219 Dot Matrix
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | #include <LEDMatrixDriver.hpp> // This sketch draw marquee text on your LED matrix using the hardware SPI driver Library by Bartosz Bielawski. // Example written 16.06.2017 by Marko Oette, www.oette.info // Define the ChipSelect pin for the led matrix (Dont use the SS or MISO pin of your Arduino!) // Other pins are Arduino specific SPI pins (MOSI=DIN, SCK=CLK of the LEDMatrix) see https://www.arduino.cc/en/Reference/SPI const uint8_t LEDMATRIX_CS_PIN = 9; // Number of 8x8 segments you are connecting const int LEDMATRIX_SEGMENTS = 4; const int LEDMATRIX_WIDTH = LEDMATRIX_SEGMENTS * 8; // The LEDMatrixDriver class instance LEDMatrixDriver lmd(LEDMATRIX_SEGMENTS, LEDMATRIX_CS_PIN); // Marquee text char text[] = "** LED MATRIX DEMO! ** (1234567890) ++ \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" ++ <$%/=?'.@,> --"; // Marquee speed (lower nubmers = faster) const int ANIM_DELAY = 30; void setup() { // init the display lmd.setEnabled(true); lmd.setIntensity(2); // 0 = low, 10 = high } int x=0, y=0; // start top left // This is the font definition. You can use http://gurgleapps.com/tools/matrix to create your own font or sprites. // If you like the font feel free to use it. I created it myself and donate it to the public domain. byte font[95][8] = { {0,0,0,0,0,0,0,0}, // SPACE {0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x18}, // EXCL {0x28,0x28,0x08,0x00,0x00,0x00,0x00,0x00}, // QUOT {0x00,0x0a,0x7f,0x14,0x28,0xfe,0x50,0x00}, // # {0x10,0x38,0x54,0x70,0x1c,0x54,0x38,0x10}, // $ {0x00,0x60,0x66,0x08,0x10,0x66,0x06,0x00}, // % {0,0,0,0,0,0,0,0}, // & {0x00,0x10,0x18,0x18,0x08,0x00,0x00,0x00}, // ' {0x02,0x04,0x08,0x08,0x08,0x08,0x08,0x04}, // ( {0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x20}, // ) {0x00,0x10,0x54,0x38,0x10,0x38,0x54,0x10}, // * {0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08}, // + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x08}, // COMMA {0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00}, // - {0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06}, // DOT {0x00,0x04,0x04,0x08,0x10,0x20,0x40,0x40}, // / {0x00,0x38,0x44,0x4c,0x54,0x64,0x44,0x38}, // 0 {0x04,0x0c,0x14,0x24,0x04,0x04,0x04,0x04}, // 1 {0x00,0x30,0x48,0x04,0x04,0x38,0x40,0x7c}, // 2 {0x00,0x38,0x04,0x04,0x18,0x04,0x44,0x38}, // 3 {0x00,0x04,0x0c,0x14,0x24,0x7e,0x04,0x04}, // 4 {0x00,0x7c,0x40,0x40,0x78,0x04,0x04,0x38}, // 5 {0x00,0x38,0x40,0x40,0x78,0x44,0x44,0x38}, // 6 {0x00,0x7c,0x04,0x04,0x08,0x08,0x10,0x10}, // 7 {0x00,0x3c,0x44,0x44,0x38,0x44,0x44,0x78}, // 8 {0x00,0x38,0x44,0x44,0x3c,0x04,0x04,0x78}, // 9 {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // : {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x08}, // ; {0x00,0x10,0x20,0x40,0x80,0x40,0x20,0x10}, // < {0x00,0x00,0x7e,0x00,0x00,0xfc,0x00,0x00}, // = {0x00,0x08,0x04,0x02,0x01,0x02,0x04,0x08}, // > {0x00,0x38,0x44,0x04,0x08,0x10,0x00,0x10}, // ? {0x00,0x30,0x48,0xba,0xba,0x84,0x78,0x00}, // @ {0x00,0x1c,0x22,0x42,0x42,0x7e,0x42,0x42}, // A {0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x7c}, // B {0x00,0x3c,0x44,0x40,0x40,0x40,0x44,0x7c}, // C {0x00,0x7c,0x42,0x42,0x42,0x42,0x44,0x78}, // D {0x00,0x78,0x40,0x40,0x70,0x40,0x40,0x7c}, // E {0x00,0x7c,0x40,0x40,0x78,0x40,0x40,0x40}, // F {0x00,0x3c,0x40,0x40,0x5c,0x44,0x44,0x78}, // G {0x00,0x42,0x42,0x42,0x7e,0x42,0x42,0x42}, // H {0x00,0x7c,0x10,0x10,0x10,0x10,0x10,0x7e}, // I {0x00,0x7e,0x02,0x02,0x02,0x02,0x04,0x38}, // J {0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44}, // K {0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7c}, // L {0x00,0x82,0xc6,0xaa,0x92,0x82,0x82,0x82}, // M {0x00,0x42,0x42,0x62,0x52,0x4a,0x46,0x42}, // N {0x00,0x3c,0x42,0x42,0x42,0x42,0x44,0x38}, // O {0x00,0x78,0x44,0x44,0x48,0x70,0x40,0x40}, // P {0x00,0x3c,0x42,0x42,0x52,0x4a,0x44,0x3a}, // Q {0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44}, // R {0x00,0x38,0x40,0x40,0x38,0x04,0x04,0x78}, // S {0x00,0x7e,0x90,0x10,0x10,0x10,0x10,0x10}, // T {0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e}, // U {0x00,0x42,0x42,0x42,0x42,0x44,0x28,0x10}, // V {0x80,0x82,0x82,0x92,0x92,0x92,0x94,0x78}, // W {0x00,0x42,0x42,0x24,0x18,0x24,0x42,0x42}, // X {0x00,0x44,0x44,0x28,0x10,0x10,0x10,0x10}, // Y {0x00,0x7c,0x04,0x08,0x7c,0x20,0x40,0xfe}, // Z // (the font does not contain any lower case letters. you can add your own.) }; // {}, // void loop() { // Draw the text to the current position int len = strlen(text); drawString(text, len, x, 0); // In case you wonder why we don't have to call lmd.clear() in every loop: The font has a opaque (black) background... // Toggle display of the new framebuffer lmd.display(); // Wait to let the human read the display delay(ANIM_DELAY); // Advance to next coordinate if( --x < len * -8 ) { x = LEDMATRIX_WIDTH; } } /** * This function draws a string of the given length to the given position. */ void drawString(char* text, int len, int x, int y ) { for( int idx = 0; idx < len; idx ++ ) { int c = text[idx] - 32; // stop if char is outside visible area if( x + idx * 8 > LEDMATRIX_WIDTH ) return; // only draw if char is visible if( 8 + x + idx * 8 > 0 ) drawSprite( font[c], x + idx * 8, y, 8, 8 ); } } /** * This draws a sprite to the given position using the width and height supplied (usually 8x8) */ void drawSprite( byte* sprite, int x, int y, int width, int height ) { // The mask is used to get the column bit from the sprite row byte mask = B10000000; for( int iy = 0; iy < height; iy++ ) { for( int ix = 0; ix < width; ix++ ) { lmd.setPixel(x + ix, y + iy, (bool)(sprite[iy] & mask )); // shift the mask by one pixel to the right mask = mask >> 1; } // reset column mask mask = B10000000; } } |
++ مخطط الرسم البياني :
++ الكود البرمجي هنا :
#define enA 9#define in1 4#define in2 5#define enB 10#define in3 6#define in4 7int motorSpeedA = 0;int motorSpeedB = 0;void setup() {pinMode(enA, OUTPUT);pinMode(enB, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(in3, OUTPUT);pinMode(in4, OUTPUT);}void loop() {int xAxis = analogRead(A0); // Read Joysticks X-axisint yAxis = analogRead(A1); // Read Joysticks Y-axis// Y-axis used for forward and backward controlif (yAxis < 470) {// Set Motor A backwarddigitalWrite(in1, HIGH);digitalWrite(in2, LOW);// Set Motor B backwarddigitalWrite(in3, HIGH);digitalWrite(in4, LOW);// Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speedmotorSpeedA = map(yAxis, 470, 0, 0, 255);motorSpeedB = map(yAxis, 470, 0, 0, 255);}else if (yAxis > 550) {// Set Motor A forwarddigitalWrite(in1, LOW);digitalWrite(in2, HIGH);// Set Motor B forwarddigitalWrite(in3, LOW);digitalWrite(in4, HIGH);// Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speedmotorSpeedA = map(yAxis, 550, 1023, 0, 255);motorSpeedB = map(yAxis, 550, 1023, 0, 255);}// If joystick stays in middle the motors are not movingelse {motorSpeedA = 0;motorSpeedB = 0;}// X-axis used for left and right controlif (xAxis < 470) {// Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 valueint xMapped = map(xAxis, 470, 0, 0, 255);// Move to left - decrease left motor speed, increase right motor speedmotorSpeedA = motorSpeedA - xMapped;motorSpeedB = motorSpeedB + xMapped;// Confine the range from 0 to 255if (motorSpeedA < 0) {motorSpeedA = 0;}if (motorSpeedB > 255) {motorSpeedB = 255;}}if (xAxis > 550) {// Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 valueint xMapped = map(xAxis, 550, 1023, 0, 255);// Move right - decrease right motor speed, increase left motor speedmotorSpeedA = motorSpeedA + xMapped;motorSpeedB = motorSpeedB - xMapped;// Confine the range from 0 to 255if (motorSpeedA > 255) {motorSpeedA = 255;}if (motorSpeedB < 0) {motorSpeedB = 0;}}// Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)if (motorSpeedA < 70) {motorSpeedA = 0;}if (motorSpeedB < 70) {motorSpeedB = 0;}analogWrite(enA, motorSpeedA); // Send PWM signal to motor AanalogWrite(enB, motorSpeedB); // Send PWM signal to motor B} #arduino #raspberrypi #electronics #arduinoproject #robotics #technology #engineering #arduinouno #robot #iot #diy #electrical #maker #programming #electronic #microcontroller #arduinoprojects #tech #esp #pcb #arduinomega #d #electricalengineering #robotica #diyelectronics #project #coding #arduinofun #sensor
No comments:
Post a Comment