Met behulp van een enkele RGB LED (of een LED-strip) om informatie te tonen: klok, thermometer en een rare communicator (6 / 7 stap)

Stap 6: Verbetering van de rare Communicator


Als je met de geheime Communicator voor enige tijd spelen zult u sommige patronen merken. Bijvoorbeeld, alle getallen beginnen met gele kleur en alle letters beginnen met magenta of wit. Het kan lijken een goed idee om te corrigeren de karakter-tabel een beetje te maken deze patronen nog intuïtievere. Dit is wat ik deed – Zie de nieuwe tabel hierboven. Ik besloot zelfs te wijden alle gele codes aan getallen, waardoor het mogelijk is voor het verzenden van HEX cijfers. Dit bleek te zijn een beetje moeilijker dan ik aanvankelijk dacht dat, als de 'brief-cijfers' van de ABCDEF bereik worden herhaald als letters, dus ik moest het maken van een speciale communicatie-modus voor hen-de HEX getallen worden verzonden met een lang geel streepje gevolgd door twee kleuren cijfers zonder de eerste twee bits voor snelheid. Als u typt HEXes beginnend met '0 x' in de seriële Monitor worden ze geïnterpreteerd als HEXes en dienovereenkomstig.

Ik zal niet ingaan op verdere details met betrekking tot deze schets want het is niet het punt van dit instructable, hopelijk u zal zitten kundig voor gebruik en bewerk de schets volgens uw behoeften. Hier is het:

 #define RED 3 // pins the RGB LED is connected to#define GREEN 5 #define BLUE 6// the table of colors. This one was calibrated for a 10mm RGB LED uint8_t RGBready[13][3] ={ {255, 0, 0}, // 00xxxx {128, 127, 0}, // 01xxxx {206, 0, 49}, // 10xxxx {110, 90, 54}, // 11xxxx white //{26, 155, 74}, // 11xxxx cyan {0, 255, 0}, // xx00xx {179, 75, 0}, // xx01xx {0, 168, 87}, // xx10xx {90, 110, 54}, // xx11xx white //{158, 10, 87}, // xx11xx pink {0, 0, 165}, // xxxx00 {206, 0, 49}, // xxxx01 {0, 212, 42}, // xxxx10 {90, 90, 74}, // xxxx11 white //{139, 105, 10}, // xxxx11 yellow {0,0,0} // 'black' };// the Secret Code table, all values are ASCII codes // this one is not strictly necessary, as it is used only // to fill substitution table during setup, but it is // easier to edit and understand uint8_t secretCode[64]={ 32, 33, 63, 46, 44, 59, 58, 45, // !?.,;:- 40, 41, 34, 39, 43, 42, 61, 47, // ()"'+*=/ 48, 49, 50, 51, 52, 53, 54, 55, // 01234567 56, 57, 65, 66, 67, 68, 69, 70, // 89ABCDEF (HEX digits) 64, 65, 66, 67, 68, 69, 70, 71, // 72, 73, 74, 75, 76, 77, 78, 79, // HIJKLMNO 80, 81, 82, 83, 84, 85, 86, 87, // PQRSTUVW 88, 89, 90, 35, 36, 37, 38, 95 // XYZ#$%&_ };uint8_t substitutionTable[64], HEXTable[16];uint8_t message[64], count; // char array (64 bytes max) and counter// below are durations for colors and the 'black' pause between, in ms uint16_t signalDuration=400, pauseBetween=100;void setup() { Serial.begin(115200); // speed must be high, see the Serial.available comment below// fill substitution table for (uint8_t k=0; k<64; k++) { substitutionTable[secretCode[k]-32] = k; }// fill HEX codes because they are also present in letters for (uint8_t k=16; k<32; k++) { HEXTable[secretCode[k]-48] = k; }// print a character table Serial.println("Character table"); for (uint8_t k=0; k<16; k++) { if (k<10) Serial.print("0"); Serial.print(k); Serial.print(": "); Serial.write(secretCode[k]); Serial.print(" "); Serial.print(k+16); Serial.print(": "); Serial.write(secretCode[k+16]); Serial.print(" "); Serial.print(k+32); Serial.print(": "); Serial.write(secretCode[k+32]); Serial.print(" "); Serial.print(k+48); Serial.print(": "); Serial.write(secretCode[k+48]); Serial.println(); } }void loop() {count=0; // drop the character counter// the weird stuff below is the solution to a thing with Serial.available: // it needs time to count all the bytes it got, but it starts reporting results // before all of them are in. It's ok in the previous sketch, // but here it can botch the HEX recognition routine. // The call to S.a and the delay help it collect its wits // (the port speed change is important too) while (!Serial.available()); delay(10);while (Serial.available()) // read string if available, convert it to our table { int incomingChar = Serial.read (); // normal characters if (incomingChar>31 && incomingChar<96) {message[count] = incomingChar; count++;} // lower case characters must be converted to upper case else if (incomingChar>96 && incomingChar<123) {message[count] = incomingChar - 32; count++;} }// if there is incoming string, show it on the LED if (count>0){ // check if we've got a HEX number if (message[0] == 48 && message[1] == 88) sendHEXmessage(); // else send normally else for (uint8_t k=0; k// the function to color-code and show info on the LED void sendRGBmessage(uint8_t letter) { letter = substitutionTable[letter-32]; // convert from ASCII to our format showRGBcolor(letter>>4); // upper 2 bits delay(signalDuration); showRGBcolor(4+((letter>>2)&3)); // middle 2 bits delay(signalDuration); showRGBcolor(8+(letter&3)); // lower 2 bits delay(signalDuration); showRGBcolor(12); // pause between characters delay(pauseBetween); }// the function to send HEX numbers void sendHEXmessage() { showRGBcolor(1); // show yellow to signify the start of a HEX sequence delay(signalDuration<<1); // double pause showRGBcolor(12); // pause between characters delay(pauseBetween); for (uint8_t k=2; k>2)&3)); // middle 2 bits delay(signalDuration); showRGBcolor(8+(letter&3)); // lower 2 bits delay(signalDuration); showRGBcolor(12); // pause between characters delay(pauseBetween); } }// the function to do the actual LED turning on // for common anode LED; in case of common cathode remove '255-' chunks void showRGBcolor(byte curLED) { analogWrite(RED, 255-RGBready[curLED][0]); analogWrite(GREEN, 255-RGBready[curLED][1]); analogWrite(BLUE, 255-RGBready[curLED][2]); } 

Gerelateerde Artikelen

Met behulp van een RGB-LED te detecteren kleuren

Met behulp van een RGB-LED te detecteren kleuren

I 'm gonna Toon u hoe u kunt een RGB LED en een fotocel cd's als de sensor van een kleur voor een micro-controller. Ik zal illustreren de methode om op te halen van een kleur met behulp van Arduino, en ik zal u tonen hoe u kunt controleren of de kleu
555 RGB Rainbow LED Driver (niet met behulp van een 4029)

555 RGB Rainbow LED Driver (niet met behulp van een 4029)

| A_Teacher |OK, is dus voor zover ik kan vertellen, dit een uniek merk Nieuw ontwerp.Alle ruimte Cadets bellen: Als een manier van motiveren mensen om het project te maken, ik ben momenteel weggeven een 3 maand Instructables Pro lidmaatschap aan de
Met behulp van een RPi een RGB LED

Met behulp van een RPi een RGB LED

Als rahulkar vermeld in zijn tutorial, lijkt LED controle te zijn van de "Hello World" van elektronica. Het is gemakkelijk aan opstelling, leer je veel over de werking van elektronica, en in het einde, heb je een handig stukje hardware te pronke
Hoe maak je een enkele LED knipperen met behulp van een Arduino Uno Board

Hoe maak je een enkele LED knipperen met behulp van een Arduino Uno Board

Vandaag, we zullen worden ter illustratie van hoe maak je een enkele LED knipperen met behulp van een Arduino Uno-board. Door elke stap te volgen, zal je dit doel bereiken.U zal het volgende nodig:Een Arduino BoardBrood bordUSB-connectorkabelEEN LED3
Multi-Color LED Lamp met behulp van een 8-kanaals LED Controller v.3

Multi-Color LED Lamp met behulp van een 8-kanaals LED Controller v.3

ik wilde om te experimenteren met het gebruik van verschillende kleuren LEDs, dan de standaard RGB, Multi-Color om effecten te creëren in een functionele lamp.Deze lamp maakt gebruik van cyaan, Magenta, geel, roze, Aqua-groen, en blauw 5mm LED's same
Een LED dobbelsteen met behulp van een PIC 16F84 (of 16F88)

Een LED dobbelsteen met behulp van een PIC 16F84 (of 16F88)

Dit is een opnieuw afdrukken van een project dat ik een aantal jaren geleden maakte-ik was trawlvisserij het web, en ontdekte dat anderen had geboekt, dus heb ik besloten om de details hier op instructables.com - zodat anderen kunnen profiteren.Veel
Met behulp van een LED voor een lichtsensor

Met behulp van een LED voor een lichtsensor

tot voor kort, CdS (Cadmium Sulfide) foto-weerstanden zijn vaak gebruikt voor licht sensing toepassingen. Helaas, ze hebben problemen. Omdat cd's cellen cadmium een giftig zwaar metaal bevatten, presenteren ze een probleem van de verwijdering. Daardo
Reis draad met behulp van een LED laser

Reis draad met behulp van een LED laser

Wist u dat LED's kunnen worden gebruikt als zowel lichte vervuilers evenals lichte detectoren? De ooit verbazingwekkende Forrest Mims ontdekte dit decennia geleden en heeft diverse projecten benadrukken van dit concept. Het is wat maakt fotodiodes we
Met behulp van een Dot Matrix LED met een Arduino en Shift Register

Met behulp van een Dot Matrix LED met een Arduino en Shift Register

de Siemens DLO7135 Dot matrix LED is een verbazingwekkend stukje opto-elektronica. Het is gefactureerd als een 5 x 7 Dot Matrix intelligente Display (r) met geheugen/Decoder/Driver. Samen met dat het geheugen, het heeft een 96-ASCII karakterdisplay s
LED licht met behulp van een Arduino

LED licht met behulp van een Arduino

Een Arduino is een open-source van de computerhardware, open-source software en microcontroller-gebaseerde kits voor het bouwen van digitale apparaten en interactieve objecten die kunnen voelen en aansturen van fysieke apparaten. Er zijn verschillend
5 x 4 LED weergave matrix met behulp van een Basic Stamp 2 (bs2) en Charlieplexing

5 x 4 LED weergave matrix met behulp van een Basic Stamp 2 (bs2) en Charlieplexing

hebben een Basic Stamp 2 en sommige extra LEDs rondhangen? Waarom niet spelen rond met het concept van charlieplexing en maak een uitvoer met behulp van slechts 5 pinnen.Voor dit instructable ik zal worden met behulp van de BS2e maar lid van de famil
3 x 3 x 3 led kubus met behulp van een 555 timer en een scala van 4020 shift IC - geen programmering (voor de complete beginner zoals ikzelf)

3 x 3 x 3 led kubus met behulp van een 555 timer en een scala van 4020 shift IC - geen programmering (voor de complete beginner zoals ikzelf)

zien van een video van een 8 x 8 x 8 led kubus op you-tube, leidde me naar de instructables website voor de eerste keer, nu ik ben verslaafd. Echter had ik of moet ik zeggen hebben een fundamenteel probleem absoluut geen ervaring of kennis van elektr
Controle op elk apparaat met behulp van een Raspberry Pi en een Relais module

Controle op elk apparaat met behulp van een Raspberry Pi en een Relais module

Het doel van deze ible is te laten zien hoe aan de slag met het opzetten van een Relais module op uw pi en onder controle. Mijn doel is om scripts toevoegen aan mijn octopussen op en uitschakelen LED-verlichting, maar hoe dan ook u wilt uiteindelijk
Bouw uw eigen logica sonde op de goedkope met behulp van een 555 Timer!

Bouw uw eigen logica sonde op de goedkope met behulp van een 555 Timer!

Hallo! Door te klikken op dit instructable je een stap dichter bij het gebouw een goedkoop, gemakkelijk om te bouwen, en wat nog belangrijker is nuttig kleine gadget... een logica sonde! Een logica sonde is handig wanneer u werkt met verschillende ch